package com.chiyoyo.rabbitmq.framework.utils;

import cn.hutool.core.util.ObjectUtil;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author chil
 */
public class ValidateUtils {
    /**
     * 从给定的表达式中提取属性名
     *
     * @param expression 包含属性名的表达式，格式为 ${...}
     * @return 提取到的属性名，如果未匹配到则返回null
     */
    public static String extractPropertyName(String expression) {
        // 定义正则表达式，匹配 ${...} 格式的字符串中的属性名，忽略冒号及其后的默认值
        Pattern pattern = Pattern.compile("\\$\\{([^:}]+)(?::[^}]+)?}");
        Matcher matcher = pattern.matcher(expression);

        // 提取匹配到的内容
        if (matcher.find()) {
            // group(1) 返回第一个捕获组，即属性名
            return matcher.group(1);
        }
        // 如果没有匹配到，返回null
        return null;
    }

    /**
     * 返回给定对象obj，如果obj为空则返回默认值def。
     *
     * @param obj 给定对象
     * @param def 默认值
     * @param <T> 对象类型
     * @return 给定对象obj或默认值def
     */
    public static <T> T getOrDefault(T obj, T def) {
        return ObjectUtil.isEmpty(obj) ? def : obj;
    }
}
